home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / libs / unixlib.lha / unix / test / setjmp_test.c < prev    next >
C/C++ Source or Header  |  1995-09-11  |  574b  |  38 lines

  1. #include <stdio.h>
  2. #include <setjmp.h>
  3. #include <signal.h>
  4. #include <alloca.h>
  5.  
  6. jmp_buf x;
  7.  
  8. void brk(int);
  9. void breakme(void);
  10.  
  11. main()
  12. {
  13.    int r;
  14.    signal(SIGINT, brk);
  15.  
  16.    r = setjmp(x); // returns 0 when called by main
  17.    puts("\nArnie sez:  I'll be back...");
  18.  
  19.    if (r == 0)
  20.       for (;;)
  21.     breakme();
  22.  
  23.    printf("Broke and jumped, r = %d\n", r);
  24.    return(0);
  25. }
  26. /* even though the brk call is supposed to return,
  27. ** we can longjmp out of it as well.
  28. */
  29. void brk(int sig)
  30. {
  31.    longjmp(x, 23);
  32. }
  33. void breakme(void)
  34. {
  35.    alloca(1000000);
  36.    puts("Break Me With ^C!");
  37. }
  38.